package main

import (
	"log"

	"github.com/Unknwon/goconfig"
)

func main() {
	// 加载配置文件
	cfg, err := goconfig.LoadConfigFile("conf.ini")
	if err != nil {
		log.Fatalf("无法加载配置文件：%s", err)
	}
	// 基本读写操作
	value, err := cfg.GetValue("", "key_default")
	// value, err := cfg.GetValue(goconfig.DEFAULT_SECTION, "key_default")
	if err != nil {
		log.Fatalf("无法获取键值(%s)：%s", "key_default", err)
	}
	log.Printf("%s > %s: %s", goconfig.DEFAULT_SECTION, "key_default", value)

	// 设置键值
	isInsert := cfg.SetValue(goconfig.DEFAULT_SECTION, "key_default", "这是新的值")
	// isInsert := cfg.SetValue(goconfig.DEFAULT_SECTION, "key_default1", "这是新的值")
	log.Printf("设置键值 %s 为插入操作：%v", "key_default", isInsert)

	//获取section块注释
	comment := cfg.GetSectionComments("super")
	log.Printf("分区 %s 的注释：%s", "super", comment)
	// 设置section块注释
	v := cfg.SetSectionComments("super", "# 这是新的注释")
	log.Printf("分区 %s 的注释被插入或删除：%v", "super", v)
	//类型转换读取
	vInt, err := cfg.Int("must", "int")
	if err != nil {
		log.Fatalf("无法获取键值(%s)：%s", "int", err)
	}
	log.Printf("%s > %s: %v", "must", "int", vInt)
	//忽略错误的获取类型值的方式，如果发生错误返回默认值或者零值
	vBool := cfg.MustBool("must", "bool")
	log.Printf("%s > %s: %v", "must", "bool", vBool)
	vBool = cfg.MustBool("must", "bool404")
	log.Printf("%s > %s: %v", "must", "bool404", vBool)
	//删除键值
	ok := cfg.DeleteKey("must", "string")
	log.Printf("删除键值 %s 是否成功：%v", "string", ok)
	//保存配置文件
	err = goconfig.SaveConfigFile(cfg, "conf-save.ini")
	if err != nil {
		log.Fatalf("保存配置文件 %s 失败：%v", "conf-save.ini", err)
	}
}
